
export default {
    //命名空间作用:能够让辅助函数,指定模块,进行属性映射
    namespaced: true,
    state: {
        name: "购物车Cart",
        carts: []
    },
    actions: {
        //主要目的,为了学会不同模块之间,操作mutation和action
        ADD_TO_CART(context, payload) {
            // console.log(context)
            // console.log(payload)
            context.commit('SET_CART', payload)
            //触发其它模块的mutation
            context.commit('product/DECREASE_INVENTORY', payload, { root: true })
        },
        //移出购物车
        REMOVE_CART(context, payload) {
            //自己的数量-1

            //product模块中的products对应的数据数量+1

            // console.log(payload)
            context.commit('DECREASE_CART', payload)

            //触发product模块中的mutation
            context.commit('product/INCREASE_INVENTORY', payload, { root: true })
        }
    },
    getters: {
        total(state) {
            return (state.carts.reduce((total, item) => {
                return total += item.count * item.price
            }, 0)).toFixed(2)
        }
    },
    mutations: {
        LOG(state) {
            console.log(state)
        },
        //加入到购物车的方法
        SET_CART(state, payload) {
            //1.点击加入购物车按钮,获取当前点击的这条数据

            //2.加入到cart模块中的carts数组中

            //3.判断如果carts数组中存在这条数据,让数量+1

            //4.如果不存在,那么就直接加入到数组中

            let target = state.carts.find(item => item.id === payload.id)

            if (target) {
                //carts里面有这条数据,让数量+1
                target.count++
            } else {
                //carts没有这条数据
                let obj = {
                    id: payload.id,
                    title: payload.title,
                    price: payload.price,
                    count: 1
                }
                //添加进入购物车数组
                state.carts.push(obj)
            }


        },
        //让数量-1
        DECREASE_CART(state, payload) {
            //根据传递过来payload的id,对carts进行查找,查找到carts中数据的id和payload的id相同的,那么让数据的count-1
            let target = state.carts.find(item => item.id === payload.id)

            if (target) {
                target.count--
            }

            //判断如果数量等于0,那么需要从carts数组中过滤掉
            if (target.count === 0) {
                state.carts = state.carts.filter(item => item.id !== target.id)
            }
        }
    }
}